package com.leyantech.ecp.agenx.common.redis.entity;

import com.leyantech.ecp.agenx.common.utils.JsonUtils;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.google.common.collect.Lists;
import com.google.gson.annotations.SerializedName;
import lombok.Builder;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;

import java.io.Serializable;
import java.util.List;

/**
 * @author eahau, {@literal <eahau@foxmail.com>}
 * @date 2022-11-30.
 */
@Getter
@Setter
@Builder
public class OnlineAssistantSession implements Serializable {

  /**
   * 店铺号.
   */
  @JsonAlias("store_id")
  @SerializedName("store_id")
  private String storeId;

  /**
   * 客服号.
   */
  @JsonAlias("assistant_id")
  @SerializedName("assistant_id")
  private String assistantId;

  /**
   * 客服昵称.
   */
  @JsonAlias("assistant_name")
  @SerializedName("assistant_name")
  private String assistantName;

  /**
   * 客户端唯一 id.
   */
  @JsonAlias("client_uuid")
  @SerializedName("client_uuid")
  private String clientUuid;

  /**
   * 客户端版本号.
   */
  @JsonAlias("client_version")
  @SerializedName("client_version")
  private String clientVersion;

  /**
   * 模式列表.
   */
  @JsonAlias("functions")
  @SerializedName("functions")
  private List<String> functions;

  public List<String> getFunctions() {
    return functions == null ? Lists.newArrayList() : functions;
  }

  /**
   * 服务模式.
   */
  @JsonAlias("service_mode")
  @SerializedName("service_mode")
  private String serviceMode;

  /**
   * 动作执行时间.
   */
  @JsonAlias("timestamp")
  @SerializedName("timestamp")
  private long timestamp;

  @JsonAlias("status")
  @SerializedName("status")
  @Setter
  private String status;

  /**
   * 客服最后的动作，只记录在线时的动作，LOGIN/CONFIG_CHANGED, 没有 LOGOUT.
   */
  @NonNull
  @SerializedName("action")
  private String action;

  /**
   * 当前客服所在节点 id, 主要用来做客服下线（停机下线）删除数据时校验，避免收到延迟消息.
   */
  @SerializedName("node_id")
  private String nodeId;

  @Override
  public String toString() {
    return JsonUtils.toJson(this);
  }

}
